<?xml version="1.0"?>
<psalm
    errorLevel="5"
    resolveFromConfigFile="true"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://getpsalm.org/schema/config"
    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
    cacheDirectory="./.github/psalm/cache/"
    errorBaseline=".github/psalm/psalm.baseline.xml"
    findUnusedBaselineEntry="false"
    findUnusedCode="false"
    findUnusedIssueHandlerSuppression="false"
>
    <projectFiles>
        <directory name="src" />
        <ignoreFiles>
            <directory name="src/Symfony/*/*/Tests" />
            <directory name="src/Symfony/*/*/*/Tests" />
            <directory name="src/Symfony/*/*/*/*/Tests" />
            <directory name="src/Symfony/Component/Intl/Resources/data/" />
            <directory name="src/Symfony/Component/Emoji/Resources/data/" />
            <directory name="vendor" />
        </ignoreFiles>
    </projectFiles>

    <issueHandlers>
        <UndefinedClass>
            <errorLevel type="suppress">
                <!-- These classes have been added in PHP 8.1 -->
                <referencedClass name="BackedEnum"/>
                <referencedClass name="ReflectionIntersectionType"/>
                <referencedClass name="UnitEnum"/>
                <!-- These classes have been added in PHP 8.2 -->
                <referencedClass name="Random\*"/>
            </errorLevel>
        </UndefinedClass>
        <UndefinedDocblockClass>
            <errorLevel type="suppress">
                <!-- These classes have been added in PHP 8.1 -->
                <referencedClass name="BackedEnum"/>
                <referencedClass name="ReflectionIntersectionType"/>
                <referencedClass name="UnitEnum"/>
            </errorLevel>
        </UndefinedDocblockClass>
        <UnusedClass>
            <errorLevel type="suppress">
                <!--
                    Because we don't analyze our tests or fixtures, we will
                    get a lot of false positives regarding unused classes.
                -->
                <directory name="src/Symfony" />
            </errorLevel>
        </UnusedClass>
        <UnusedConstructor>
            <errorLevel type="suppress">
                <!--
                    We use private constructors to avoid instantiation.
                    This kind of error is bogus in most cases.
                -->
                <directory name="src/Symfony" />
            </errorLevel>
        </UnusedConstructor>
        <UndefinedAttributeClass>
            <errorLevel type="suppress">
                <!-- These classes have been added in PHP 8.2 -->
                <referencedClass name="SensitiveParameter"/>
            </errorLevel>
        </UndefinedAttributeClass>
    </issueHandlers>

    <forbiddenFunctions>
        <function name="empty"/>
    </forbiddenFunctions>
</psalm>
